package com.night.icm.service.base.service;

import com.night.icm.common.night_enum.CourseBaseType;
import com.night.icm.common.utils.PageDataDTO;
import com.night.icm.common.utils.SimpleDataDTO;
import com.night.icm.model.base.CourseTypeDTO;

import java.util.List;

/**
 * CourseTypeService
 *
 * @author Liao ZhiYong
 * @date 2020/2/6
 */
public interface CourseTypeService {

    /**
     * 分页查询课程类型
     *
     * @param page           页号，从0开始
     * @param size           每页记录条数
     * @param sort           排序字段，例如：字段1,asc,字段2,desc
     * @param code           课程详细类型编号
     * @param name           课程详细类型名称
     * @param courseBaseType 课程基础类型
     * @return 课程类型
     */
    PageDataDTO<CourseTypeDTO> findOnePage(int page, int size, String sort, String code, String name, CourseBaseType courseBaseType);

    /**
     * 新增课程类型
     *
     * @param courseTypeDTO 课程类型信息
     * @return 课程类型信息
     */
    CourseTypeDTO create(CourseTypeDTO courseTypeDTO);

    /**
     * 删除课程类型
     *
     * @param id 课程类型id
     */
    void delete(String id);

    /**
     * 更新课程类型信息
     *
     * @param id            课程类型id
     * @param courseTypeDTO 课程类型信息
     * @return 课程类型信息
     */
    CourseTypeDTO update(String id, CourseTypeDTO courseTypeDTO);

    /**
     * 根据id查找课程类型信息
     *
     * @param id 课程类型id
     * @return 课程类型信息
     */
    CourseTypeDTO findById(String id);

    /**
     * 查找所有课程类型信息，可选择排序
     *
     * @param param   排序参数
     * @param pattern 排序模式: asc/desc
     * @return 课程类型信息
     */
    List<CourseTypeDTO> findAll(String param, String pattern);

    /**
     * 检查课程详细类型编号是否已存在
     *
     * @param code 课程详细类型编号
     * @return 是否存在
     */
    SimpleDataDTO<Boolean> checkCodeExist(String code);
}
